/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package bolao.dominio.seguranca;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;

/**
 *
 * @author 
 */
@Entity
public class Recurso implements Serializable {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long idRecurso;

    private String nomeRecurso;
    private String descRecurso;
    private String url;

    @ManyToMany
    @JoinTable(name="PERMISSAO", joinColumns=@JoinColumn(name="RECURSO"), inverseJoinColumns=@JoinColumn(name="GRUPO"))
    private List<Grupo> gruposAutorizados = new ArrayList<Grupo>();

    public List<Grupo> getGruposAutorizados() {
        return gruposAutorizados;
    }

    public void setGruposAutorizados(List<Grupo> gruposAutorizados) {
        this.gruposAutorizados = gruposAutorizados;
    }

    public String getDescRecurso() {
        return descRecurso;
    }

    public void setDescRecurso(String descRecurso) {
        this.descRecurso = descRecurso;
    }

    public String getNomeRecurso() {
        return nomeRecurso;
    }

    public void setNomeRecurso(String nomeRecurso) {
        this.nomeRecurso = nomeRecurso;
    }

    public Boolean getPublico() {
        return publico;
    }

    public void setPublico(Boolean publico) {
        this.publico = publico;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }
    private Boolean publico;


    @Override
    public String toString() {
        return descRecurso + " (" + url + ")";
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Recurso other = (Recurso) obj;
        if (this.idRecurso != other.idRecurso && (this.idRecurso == null || !this.idRecurso.equals(other.idRecurso))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 43 * hash + (this.idRecurso != null ? this.idRecurso.hashCode() : 0);
        return hash;
    }

    public Long getIdRecurso() {
        return idRecurso;
    }

    public void setIdRecurso(Long idRecurso) {
        this.idRecurso = idRecurso;
    }


    public Recurso() {
    }

    public Recurso(String nomeRecurso, String descRecurso, String url, Boolean publico, Grupo... gruposAutorizados) {
        this.nomeRecurso = nomeRecurso;
        this.descRecurso = descRecurso;
        this.url = url;
        this.publico = publico;
        this.gruposAutorizados.addAll(Arrays.asList(gruposAutorizados));
    }   

    public boolean isAutorizado(Usuario user) {
        boolean autorizado = false;
        for (Grupo grupo : user.getGrupos()) {
            if (this.gruposAutorizados.contains(grupo)) {
                autorizado = true;
            }
        }
        return autorizado;
    }

    public void addGrupoAutorizado(Grupo g) {
        this.gruposAutorizados.add(g);
    }


    


}
